/**
 * JavaScript CommUtil
 */
;
(function(factory) {
	if(typeof define === "function" && define.amd) {
		define(["jquery"], factory);
	} else {
		factory(jQuery);
	}

}(function($) {
	'use strict';

	if(typeof(module) !== 'undefined') {
		module.exports = CommUtil;
	}

	//requirejs(AMD) support
	if(typeof define === 'function' && define.amd) {
		define([], function() {
			'use strict';
			return CommUtil;
		});
	}

	//seajs(CMD) support
	if(typeof define === 'function') {
		define([], function() {
			'use strict';
			return CommUtil;
		});
	}

	var CommUtil = function() {}

	/**
	 * 重置表单
	 * @param jQueryHtmlObj
	 * @param fromclassName
	 * @returns {String}
	 */
	CommUtil.prototype.formReset = function(jQueryHtmlObj, fromClassName) {
		if(jQueryHtmlObj != undefined &&
			jQueryHtmlObj != null &&
			fromClassName != undefined &&
			fromClassName != null &&
			fromClassName != "") {

			var jfromobjs = $(jQueryHtmlObj).find("." + fromClassName);

			$.each(jfromobjs, function(i, n) {
				$(n).val("");
			});
		}
	}

	/**
	 * 解析URL中的参数
	 * @param url
	 * @returns {Object}
	 */
	CommUtil.prototype.parseUrlParm = function(url) {
		var str = url.substr(url.indexOf('?') + 1);
		var arr = str.split('&');
		var obj = {};
		for(var i = 0; i < arr.length; i++) {
			var earr = arr[i].split('=');
			obj[earr[0]] = earr[1];
		}
		return obj;
	}

	//---------------------------------------------------  
	//日期格式化  
	//格式 YYYY/yyyy/YY/yy 表示年份  
	//MM/M 月份  
	//W/w 星期  
	//dd/DD/d/D 日期  
	//hh/HH/h/H 时间  
	//mm/m 分钟  
	//ss/SS/s/S 秒  
	//--------------------------------------------------- 
	Date.prototype.Format = function(formatStr) {
		var str = formatStr;
		var Week = ['日', '一', '二', '三', '四', '五', '六'];

		str = str.replace(/yyyy|YYYY/, this.getFullYear());
		str = str.replace(/yy|YY/, (this.getYear() % 100) > 9 ? (this.getYear() % 100).toString() : '0' + (this.getYear() % 100));

		str = str.replace(/MM/, (this.getMonth() + 1) > 9 ? (this.getMonth() + 1).toString() : '0' + (this.getMonth() + 1));
		str = str.replace(/M/g, this.getMonth() + 1);

		str = str.replace(/w|W/g, Week[this.getDay()]);

		str = str.replace(/dd|DD/, this.getDate() > 9 ? this.getDate().toString() : '0' + this.getDate());
		str = str.replace(/d|D/g, this.getDate());

		str = str.replace(/hh|HH/, this.getHours() > 9 ? this.getHours().toString() : '0' + this.getHours());
		str = str.replace(/h|H/g, this.getHours());

		str = str.replace(/mm/, this.getMinutes() > 9 ? this.getMinutes().toString() : '0' + this.getMinutes());
		str = str.replace(/m/g, this.getMinutes());

		str = str.replace(/ss|SS/, this.getSeconds() > 9 ? this.getSeconds().toString() : '0' + this.getSeconds());
		str = str.replace(/s|S/g, this.getSeconds());

		return str;
	}

	//数组去重
	Array.prototype.unique = function() {
		var temp = new Array();
		this.sort();
		for(var i = 0; i < this.length; i++) {
			if(this[i] == this[i + 1]) {
				continue;
			}
			temp[temp.length] = this[i];
		}
		return temp;
	}

	var old = $.fn.commUtil;

	$.fn.commUtil = $.extend($.fn.commUtil, CommUtil.prototype);

	$.fn.commUtil.constant = {
		baseUrl : "http://106.14.66.180:8081/goodcolservice",
		databaseUrl : "jdbc:mysql://106.14.66.180:3306/test?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&&serverTimezone=GMT%2B8",
		databaseUsername : "test",
		databasePassword : "test123"
	}

	$.fn.commUtil.Constructor = CommUtil;
	$.fn.commUtil.getSqlStr = function(sql, params){
		var str = "";
		var i = 0;
		$.each(sql.split(""), function(index, item){
			if(item == "?"){
				str += " '" + params[i] + "' ";
				i++;
			}else if(item == "!"){
				str += " " + params[i] + " ";
				i++;
			}else{
				str += item;
			}
		})
		return str;
	} 
	
	$.fn.commUtil.noConflict = function() {
		$.fn.commUtil = old;
		return this;
	}
	
	$.newAjax = function(opt) {
		var fn = {
			error: function(XMLHttpRequest, textStatus, errorThrown) {},
			success: function(data, textStatus) {}
		}
		if (opt.error) {
			fn.error = opt.error;
		}
		if (opt.success) {
			fn.success = opt.success;
		}
		// opt.data.
		opt.contentType =  opt.contentType ? opt.contentType : 'application/json';
		opt.dataType = opt.dataType ? opt.dataType : 'JSON';
		opt.type = opt.type ? opt.type : 'POST';
		
		if(!opt.data){
			return;
		}
		var jsonObj = JSON.parse(opt.data);
		jsonObj.databaseUrl = jsonObj.databaseUrl ? jsonObj.databaseUrl : $.fn.commUtil.constant.databaseUrl;
		jsonObj.databaseUsername = jsonObj.databaseUsername ? jsonObj.databaseUsername : $.fn.commUtil.constant.databaseUsername;
		jsonObj.databasePassword  = jsonObj.databasePassword ? jsonObj.databasePassword : $.fn.commUtil.constant.databasePassword;
		opt.data = JSON.stringify(jsonObj);
		//扩展增强处理
		var _opt = $.extend(opt, {
			error: function(XMLHttpRequest, textStatus, errorThrown) {
				//错误方法增强处理
				fn.error(XMLHttpRequest, textStatus, errorThrown);
			},
			success: function(data, textStatus) {
				//成功回调方法增强处理
				fn.success(data, textStatus);
			},
			beforeSend: function(XHR) {
				//提交前回调方法
				$("body").append("<div id='ajaxInfo' style=''>正在加载,请稍后...</div>");
			},
			complete: function(XHR, TS) {
				//请求完成后回调函数 (请求成功或失败之后均调用)。
				$("#ajaxInfo").remove();;
			}
		});
		return $.ajax(_opt);
	
	};
	
	$.fn.commUtil.getLoginUser = function() {
		var loginUserStr = window.sessionStorage.getItem("loginUser");
		console.info(loginUserStr);
		if(!loginUserStr || loginUserStr === ""){
			
			window.location.href = "login.html";
		}
		return JSON.parse(loginUserStr);
	}
	
	// notice: function(){
	//       //示范一个公告层
	//       layer.open({
	//         type: 1
	//         ,title: false //不显示标题栏
	//         ,closeBtn: false
	//         ,area: '300px;'
	//         ,shade: 0.8
	//         ,id: 'LAY_layuipro' //设定一个id，防止重复弹出
	//         ,btn: ['火速围观', '残忍拒绝']
	//         ,btnAlign: 'c'
	//         ,moveType: 1 //拖拽模式，0或者1
	//         ,content: '<div style="padding: 50px; line-height: 22px; background-color: #393D49; color: #fff; font-weight: 300;">你知道吗？亲！<br>layer ≠ layui<br><br> layer 只是作为 layui 的一个弹层模块，由于其用户基数较大，所以常常会有人以为 layui 是 <del>layerui</del><br><br>layer 虽然已被 Layui 收编为内置的弹层模块，但仍然会作为一个独立组件全力维护、升级 ^_^</div>'
	//         ,success: function(layero){
	//           var btn = layero.find('.layui-layer-btn');
	//           btn.find('.layui-layer-btn0').attr({
	//             href: 'http://www.layui.com/'
	//             ,target: '_blank'
	//           });
	//         }
	//       });
	//     }
	
}));